package com.yllt4cloud.common.ddbase.containers;

import com.yllt4cloud.common.core.constant.SystemConfigConstants;
import com.yllt4cloud.common.ddbase.domain.SystemConfig;
import org.apache.commons.lang.StringUtils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 存放系统部分变量
 * <p><b>类名称：</b>SystemConfigContainer </p>
 * <p><b>类描述：</b></p>
 * <p><b>日期：</b>2016-1-18 下午7:58:47</p>
 *
 * @author yaozq
 */
public class SystemConfigContainer {

    private static SystemConfigContainer container;
    private Map<String, SystemConfig> systemConfiMap = new ConcurrentHashMap<String, SystemConfig>();

    private SystemConfigContainer() {
        super();
    }

    //获取实例
    public static SystemConfigContainer instance() {
        if (null == container) {
            synchronized (SystemConfigContainer.class) {
                if (null == container) {
                    container = new SystemConfigContainer();
                }
            }
        }
        return container;
    }


    //根据key获取对应的系统设置
    public SystemConfig getSystemConfig(String key) {
        if (systemConfiMap == null)
            return null;
        return systemConfiMap.get(key);
    }

    //根据key获取对应的系统设置
    public Date getWorkDate() {
        try {
            return new SimpleDateFormat("yyyy-MM-dd").parse(getSystemConfig(SystemConfigConstants.SYSTEM_TIME).getKeyValue());
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    //根据key获取对应的系统设置
    public String getWorkDateStr() {
        return getSystemConfig(SystemConfigConstants.SYSTEM_TIME).getKeyValue();
    }

    //  获取场所名称
    public String getCsName(){
        return getSystemConfig(SystemConfigConstants.SYS_CS_NAME).getKeyValue();
    }

    //  获取场所别名
    public String getCsAlias(){
        return getSystemConfig(SystemConfigConstants.SYS_CS_ALIAS).getKeyValue();
    }

    //  获取场所图标
    public String getSysCsIcon(){
        return getSystemConfig(SystemConfigConstants.SYS_CS_ICON).getKeyValue();
    }

    // 获取现抽手续费比例 luth
    public Integer  getSysXianChouShouXuBiLi(){
        SystemConfig vo=getSystemConfig(SystemConfigConstants.SYS_SHOUYIN_KASHOU_FEE);
        if(vo==null || vo.getKeyValue()==null ){
            return 0;  //没有配置 ，则手续比例为0
        }else{
            return  Integer.parseInt(vo.getKeyValue());
        }
    }

    // 获取业绩计算的版本  0 酒吧版 1 夜总会版本
    public Integer  getYeJiBanBen(){
        SystemConfig vo=getSystemConfig(SystemConfigConstants.SYS_YEJI_BANBEN);
        if(vo==null || vo.getKeyValue()==null ){
            return 0;  //没有配置 ，则默认是酒吧版本
        }else{
            return  Integer.parseInt(vo.getKeyValue());
        }
    }

    // 互动人是否拆分业绩，默认是拆分， 1 拆分  0 否

    public Integer  getYeJiHuDongRenChaiFen(){
        SystemConfig vo=getSystemConfig(SystemConfigConstants.SYS_YEJI_HU_DONG_REN_CHAIFEN);
        if(vo==null || vo.getKeyValue()==null ){
            return 1;  //没有配置 ，则默认是拆分
        }else{
            return  Integer.parseInt(vo.getKeyValue());
        }
    }

    /**
     * 互动人平分开房数
     * @return
     */
    public Integer  getKaiFangShuChaiFen(){
        SystemConfig vo=getSystemConfig(SystemConfigConstants.ZK_IS_HUDONG_PING_FENG_KAI_FANG_SHU);
        if(vo==null || vo.getKeyValue()==null ){
            return 1;  //没有配置 ，则默认是拆分
        }else{
            return  Integer.parseInt(vo.getKeyValue());
        }
    }

   // 业绩报表查询设置 0全部 1仅当天内业绩
    public Integer  getYeJiBaoChaXunSheZhi(){
        SystemConfig vo=getSystemConfig(SystemConfigConstants.YEJI_BAOBIAO_CHAXUN_SHEZHI);
        if(vo==null || vo.getKeyValue()==null ){
            return 0;  //没有配置 ，则默认是0  允许查询全部的
        }else{
            return  Integer.parseInt(vo.getKeyValue());
        }
    }

    public void uptSystemConfig(SystemConfig systemConfig) {
        SystemConfig oldSystemConfig = systemConfiMap.get(systemConfig.getJianMing());

        if (oldSystemConfig != null) {
            oldSystemConfig.setKeyValue(systemConfig.getKeyValue());
        }
        systemConfiMap.put(systemConfig.getJianMing(), systemConfig);
    }

    public void uptSystemConfig(List<SystemConfig> configs) {
        if (configs != null && !configs.isEmpty()) {
            for (SystemConfig systemConfig : configs) {
                uptSystemConfig(systemConfig);
            }
        }
    }

/*    public void nextDay(){
    	Date systemDate = null;
		try {
			systemDate = DateUtils.convertStringToDate(getSystemConfig(SystemConfigConstants.SYSTEM_TIME).getKeyValue(), "yyyy-MM-dd");
		} catch (ParseException e) {
			e.printStackTrace();
			throw new RuntimeException(e);
		}
        Calendar c = Calendar.getInstance();
        c.setTime(systemDate);
        //当前系统时间加一天
        c.add(Calendar.DAY_OF_MONTH, 1);
        
        SystemConfig systemConfig = new SystemConfig();
        systemConfig.setJianMing(SystemConfigConstants.SYSTEM_TIME);
        systemConfig.setKeyValue(DateUtils.formatDate(c, "yyyy-MM-dd"));
        
        //更新数据
        uptSystemConfig(systemConfig);
    }
    */
    public void setSystemConfiMap(Map<String, SystemConfig> systemConfiMap) {
        this.systemConfiMap = systemConfiMap;
    }

    public String getCsCode(){
        //获取场所代码
        SystemConfig config = getSystemConfig(SystemConfigConstants.PLATFORM_STORE_CODE);
        String store_code="";
        if(config==null || StringUtils.isEmpty(config.getKeyValue())){

        }else{
            store_code= config.getKeyValue();
        }
        return store_code;
    }

    public Integer getIsAnyTimeCheck(){

        SystemConfig config = getSystemConfig(SystemConfigConstants.CK_IS_TAKE_STOCK_AT_ANY_TIME);
        if (config == null || config.getKeyValue() == null){
            return 0;
        }
        return Integer.parseInt(config.getKeyValue());
    }
}
